home *** CD-ROM | disk | FTP | other *** search
/ The Original Shareware 1.1 / The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso / 32 / cardgame.zip / LUCKY13.BAS < prev   
BASIC Source File  |  1986-10-23  |  14KB  |  396 lines

  1. 10 CLS
  2. 15 DIM DECK$(52),PRE(52),SUIT$(4),CARD$(13),CLR(4,2),ROW$(5,13),NDECK$(52)
  3. 20 DIM UP$(4)
  4. 25 DEF FNR(X)=INT((RND*X)+1)
  5. 26 RANDOMIZE(VAL(RIGHT$(TIME$,2)))
  6. 30 PRINT "Lucky 13 Solitaire":PRINT
  7. 31 PRINT "Do you want color? ";
  8. 32 A$=INKEY$:IF A$="" THEN 32
  9. 33 GOSUB 10000:IF A$<>"Y" AND A$<>"N" THEN 32 ELSE PRINT A$:COL$=A$
  10. 34 PRINT "Do you need Instructions? ";
  11. 35 A$=INKEY$:IF A$="" THEN 35
  12. 36 GOSUB 10000:IF A$<>"Y" AND A$<>"N" THEN 35 ELSE PRINT A$
  13. 37 IF A$="Y" THEN GOSUB 5000
  14. 40 PRINT "Initializing ... "
  15. 45 GOSUB 1000
  16. 50 PRINT "Shuffling ... "
  17. 60 GOSUB 1200
  18. 65 PRINT "Dealing ... "
  19. 70 GOSUB 1500
  20. 80 GOSUB 1700
  21. 90 TOP=3
  22. 91 COLOR 7,1:LOCATE 20,50:PRINT " C - More cards             ";
  23. 92 LOCATE 21,50:PRINT " D - Move from deck,        ";
  24. 93 LOCATE 22,50:PRINT " P - Move from pile         ";
  25. 94 LOCATE 23,50:PRINT " Row Number - move from row ";
  26. 95 LOCATE 24,50:PRINT " Q - Quit                   ";:COLOR 7,0
  27. 100 LOCATE 19,1:PRINT "Next card in deck:";
  28. 110 IF NDECK<1 THEN PRINT "None";:GOTO 140
  29. 120 C$=NDECK$(TOP):GOSUB 1300
  30. 130 LOCATE 21,1:PRINT USING "## cards left in pile";14-PILE
  31. 140 LOCATE 22,1:PRINT USING "Card ## of ## left in deck";TOP;NDECK;
  32. 150 LOCATE 24,1:PRINT "                               ";
  33. 151 IF SCORE>51 THEN 900
  34. 155 LOCATE 23,1:PRINT "What do you want to do?   ";:LOCATE 23,23
  35. 160 A$=INKEY$:IF A$="" THEN 160 ELSE GOSUB 10000
  36. 165 IF A$="P" THEN PRINT A$;:GOSUB 4000:GOTO 100
  37. 170 IF A$="C" THEN PRINT A$;:GOSUB 300:GOTO 100
  38. 180 IF A$="D" THEN PRINT A$;:GOSUB 350:GOTO 100
  39. 190 IF A$>="1" AND A$<="4" THEN PRINT A$;:GOSUB 600:GOTO 100
  40. 200 IF A$="Q" THEN 900
  41. 210 GOTO 160
  42. 300 REM Get more cards from deck
  43. 310 IF TOP=NDECK THEN TOP=3 ELSE TOP=TOP+3
  44. 320 IF TOP>NDECK THEN TOP=NDECK
  45. 330 RETURN
  46. 350 REM Move from deck to a row
  47. 360 LOCATE 24,1:PRINT "From deck to row? ";
  48. 380 A$=INKEY$:GOSUB 10000:IF (A$>="1" AND A$<="4") OR A$="U" THEN 390 ELSE 380
  49. 390 IF A$="U" THEN PRINT "Up"; ELSE PRINT A$;
  50. 395 IF A$="U" THEN 540
  51. 400 TOROW=VAL(A$)+1
  52. 401 IF ROW$(TOROW,1)<>"   " THEN 410
  53. 402 IN$=NDECK$(TOP):GOSUB 3000
  54. 403 IF NUM=START-1 OR (START=1 AND NUM=13) THEN PLACE=0:GOTO 500
  55. 410 FOR PLACE=13 TO 1 STEP -1
  56. 420 IF ROW$(TOROW,PLACE)<>"   " THEN 460
  57. 430 NEXT PLACE
  58. 440 GOSUB 990
  59. 450 RETURN
  60. 460 BELOW$=ROW$(TOROW,PLACE)
  61. 470 ABOVE$=NDECK$(TOP)
  62. 480 GOSUB 2000       'check if match
  63. 490 IF OK$="NO" THEN 440
  64. 500 ROW$(TOROW,PLACE+1)=NDECK$(TOP)
  65. 520 ROW=TOROW:GOSUB 3100
  66. 525 GOSUB 2200        'repack deck
  67. 530 RETURN
  68. 540 REM Play Deck Up
  69. 550 ABOVE$=NDECK$(TOP)
  70. 560 GOSUB 2300        'play up
  71. 570 IF OK$="NO" THEN 440
  72. 580 GOTO 525
  73. 600 REM Move from one row to another
  74. 610 FROMROW=VAL(A$)+1
  75. 620 FROMPLACE=1
  76. 630 GOTO 660
  77. 660 LOCATE 24,1:PRINT "From row";FROMROW-1;"to row? ";
  78. 680 A$=INKEY$:GOSUB 10000:IF (A$>="1" AND A$<="4") OR A$="U" THEN 690 ELSE 680
  79. 690 IF A$="U" THEN PRINT "Up"; ELSE PRINT A$;
  80. 695 IF A$="U" THEN 830
  81. 700 TOROW=VAL(A$)+1
  82. 710 FOR TOPLACE=13 TO 1 STEP -1
  83. 720 IF ROW$(TOROW,TOPLACE)<>"   " THEN 760
  84. 730 NEXT TOPLACE
  85. 740 GOSUB 990
  86. 750 RETURN
  87. 760 REM
  88. 770 ABOVE$=ROW$(FROMROW,1)
  89. 775 BELOW$=ROW$(TOROW,TOPLACE)
  90. 780 GOSUB 2000               'check if match
  91. 790 IF OK$="NO" THEN 740
  92. 800 GOSUB 3200               'move the stack
  93. 810 ROW=FROMROW:GOSUB 3100   'redraw a row
  94. 815 ROW=TOROW:GOSUB 3100     'redraw a row
  95. 816 IF ROW$(FROMROW,1)="   " THEN TOROW=FROMROW:GOTO 4300
  96. 820 RETURN
  97. 830 REM play from a row to up
  98. 832 FOR FROMPLACE=13 TO 1 STEP -1
  99. 834 IF ROW$(FROMROW,FROMPLACE)<>"   " THEN 840
  100. 836 NEXT FROMPLACE
  101. 838 GOSUB 990:RETURN
  102. 840 ABOVE$=ROW$(FROMROW,FROMPLACE)
  103. 850 GOSUB 2300        'play to aces
  104. 851 IF OK$="NO" THEN 740
  105. 854 ROW$(FROMROW,FROMPLACE)="   "
  106. 856 ROW=FROMROW:GOSUB 3100   'redraw a row
  107. 857 IF ROW$(FROMROW,1)="   " THEN TOROW=FROMROW:GOTO 4300
  108. 860 RETURN
  109. 900 REM Exit game
  110. 901 LOCATE 19,1:PRINT "                                  ";
  111. 902 LOCATE 21,1:PRINT "                                  ";
  112. 903 LOCATE 22,1:PRINT "                                  ";
  113. 904 LOCATE 23,1:PRINT "                                  ";
  114. 905 LOCATE 24,1:PRINT "                                  ";
  115. 910 GOSUB 1800
  116. 920 GOSUB 1900
  117. 925 FOR I=1 TO 20:A$=INKEY$:NEXT I
  118. 930 GOSUB 3400:PRINT "Play again? (Y or N) ";
  119. 940 A$=INKEY$:IF A$="" THEN 940
  120. 950 GOSUB 10000
  121. 960 IF A$="Y" THEN CLS:PRINT "Re-";:GOTO 40
  122. 962 IF A$="N" THEN 970
  123. 964 GO TO 940
  124. 970 CLS:PRINT "Bye":END
  125. 990 REM Bad Play
  126. 992 COLOR 0,7:LOCATE 3,50:PRINT " Can't do that!            ";
  127. 994 LOCATE 4,50:PRINT " Press any key to continue ";:COLOR 7,0
  128. 996 IF INKEY$="" THEN 996
  129. 997 LOCATE 3,50:PRINT "                           ";
  130. 998 LOCATE 4,50:PRINT "                           ";
  131. 999 RETURN
  132. 1000 REM
  133. 1005 DOWN$=CHR$(178):DOWN$=DOWN$+DOWN$+DOWN$
  134. 1009 IF COL$="N" THEN 1020
  135. 1010 FOR I=1 TO 2:CLR(I,1)=4:CLR(I,2)=7:NEXT
  136. 1015 FOR I=3 TO 4:CLR(I,1)=0:CLR(I,2)=7:NEXT
  137. 1019 GO TO 1030
  138. 1020 FOR I=1 TO 2:CLR(I,1)=0:CLR(I,2)=7:NEXT
  139. 1025 FOR I=3 TO 4:CLR(I,1)=7:CLR(I,2)=0:NEXT
  140. 1030 FOR I=1 TO 4:SUIT$(I)=CHR$(I+2):NEXT I
  141. 1035 FOR I=1 TO 4:UP$(I)="   ":NEXT I
  142. 1040 FOR I=2 TO 9:CARD$(I)=STR$(I):NEXT I
  143. 1050 CARD$(1)=" A":CARD$(10)="10":CARD$(11)=" J":CARD$(12)=" Q":CARD$(13)=" K"
  144. 1060 FOR I=1 TO 4
  145. 1070 FOR J=1 TO 13
  146. 1080 K=(I-1)*13+J
  147. 1090 DECK$(K)=CARD$(J)+SUIT$(I)
  148. 1100 NEXT J
  149. 1110 NEXT I
  150. 1120 FOR I=1 TO 5
  151. 1130 FOR J=1 TO 13
  152. 1140 ROW$(I,J)="   "
  153. 1150 NEXT J,I
  154. 1160 SCORE=1:PILE=1
  155. 1170 RETURN
  156. 1200 REM Shuffle
  157. 1210 FOR I=1 TO 52:NDECK$(I)="":NEXT I
  158. 1220 FOR I=1 TO 52
  159. 1230 R=FNR(52)
  160. 1240 IF NDECK$(R)="" THEN NDECK$(R)=DECK$(I) ELSE 1230
  161. 1250 NEXT I
  162. 1260 FOR I=1 TO 52
  163. 1270 DECK$(I)=NDECK$(I)
  164. 1280 NEXT I
  165. 1290 RETURN
  166. 1300 REM Display a card (C$)
  167. 1310 IF C$=DOWN$ THEN 1350
  168. 1320 IF C$="   " THEN 1350
  169. 1330 S=ASC(RIGHT$(C$,1))-2
  170. 1340 COLOR CLR(S,1),CLR(S,2)
  171. 1350 PRINT C$;:COLOR 7,0:PRINT "    ";
  172. 1360 RETURN
  173. 1500 REM Deal the game
  174. 1510 UP$=DECK$(1)
  175. 1520 FOR I=1 TO 13
  176. 1530 ROW$(1,I)=DECK$(I+1)
  177. 1540 NEXT I
  178. 1550 FOR I=1 TO 4
  179. 1560 ROW$(I+1,1)=DECK$(14+I)
  180. 1570 NEXT I
  181. 1580 CLS:L=5:LOCATE 1,5:PRINT "Top:"
  182. 1585 LOCATE 2,50:PRINT "Top card was ";:C$=UP$:GOSUB 1300
  183. 1590 S=ASC(RIGHT$(UP$,1))-2
  184. 1600 UP$(S)=UP$
  185. 1610 LOCATE 1,(5+(S*8))
  186. 1620 C$=UP$(S):GOSUB 1300
  187. 1630 LOCATE 4,1
  188. 1640 PRINT "Pile    1      2      3      4"
  189. 1650 FOR ROW=1 TO 5
  190. 1660 C$=ROW$(ROW,1)
  191. 1670 GOSUB 1300
  192. 1680 NEXT ROW
  193. 1690 RETURN
  194. 1700 REM Prepare to play
  195. 1710 FOR I=1 TO 34
  196. 1720 J=I+18
  197. 1730 NDECK$(I)=DECK$(J)
  198. 1740 NEXT I
  199. 1750 FOR I=35 TO 52:NDECK$(I)="":NEXT I
  200. 1760 IN$=UP$:GOSUB 3000:START=NUM
  201. 1780 NDECK=34
  202. 1790 RETURN
  203. 1800 REM Show Deck
  204. 1810 LL=3
  205. 1815 LOCATE 3,50:PRINT "Cards left in deck:";
  206. 1817 IF NDECK=0 THEN 1890
  207. 1820 FOR I=1 TO NDECK STEP 3
  208. 1830 LL=LL+1:LOCATE LL,50
  209. 1840 FOR J=0 TO 2
  210. 1845 IF I+J>NDECK THEN 1870
  211. 1850 C$=NDECK$(I+J)
  212. 1860 GOSUB 1300
  213. 1870 NEXT J:PRINT "     ";:NEXT I
  214. 1880 RETURN
  215. 1890 LOCATE 4,50:PRINT "None.                     ";
  216. 1895 FOR I=2 TO 3:LOCATE LL+I,50:PRINT "                          ";:NEXT
  217. 1899 RETURN
  218. 1900 REM show pile
  219. 1910 LL=4
  220. 1920 FOR PLACE=PILE TO 13
  221. 1925 LL=LL+1:LOCATE LL,1
  222. 1935 C$=ROW$(1,PLACE)
  223. 1950 GOSUB 1300
  224. 1970 LOCATE LL,1
  225. 1980 NEXT PLACE
  226. 1990 RETURN
  227. 2000 REM Check if above$ can go on below$
  228. 2010 IN$=ABOVE$:GOSUB 3000:ANUM=NUM:ASUIT=SUIT
  229. 2020 IN$=BELOW$:GOSUB 3000:BNUM=NUM:BSUIT=SUIT
  230. 2030 OK$="YES"
  231. 2040 IF BNUM=1 AND ANUM=13 THEN BNUM=14
  232. 2050 IF ANUM+1<>BNUM THEN OK$="NO"
  233. 2060 IF ASUIT<=2 AND BSUIT<=2 THEN OK$="NO"
  234. 2070 IF ASUIT>=3 AND BSUIT>=3 THEN OK$="NO"
  235. 2080 RETURN
  236. 2200 REM Repack Deck
  237. 2205 IF NDECK=1 THEN TOP=0:NDECK=0:RETURN
  238. 2210 FOR I=TOP+1 TO NDECK
  239. 2220 NDECK$(I-1)=NDECK$(I)
  240. 2230 NEXT I
  241. 2240 NDECK=NDECK-1
  242. 2250 TOP=TOP-1
  243. 2260 IF TOP<1 THEN TOP=3
  244. 2280 IF TOP>NDECK THEN TOP=NDECK
  245. 2290 RETURN
  246. 2300 REM Play ABOVE$ to aces
  247. 2310 IN$=ABOVE$:GOSUB 3000:ANUM=NUM:ASUIT=SUIT
  248. 2320 IN$=UP$(ASUIT):IF IN$="   " THEN BNUM=START-1:GOTO 2340
  249. 2330 GOSUB 3000:BNUM=NUM
  250. 2340 IF BNUM=13 AND ANUM=1 THEN ANUM=14
  251. 2350 IF ANUM=BNUM+1 THEN OK$="YES" ELSE OK$="NO":RETURN
  252. 2360 UP$(ASUIT)=ABOVE$
  253. 2370 LOCATE 1,(5+(ASUIT*8)):C$=ABOVE$
  254. 2380 GOSUB 1300
  255. 2390 SCORE=SCORE+1:LOCATE 1,50:PRINT "Score";SCORE;:RETURN
  256. 3000 REM change in$ to num and suit
  257. 3005 IF A$="   " THEN NUM=0:SUIT=0:RETURN
  258. 3010 A$=LEFT$(IN$,2)
  259. 3020 IF A$=" A" THEN A$=" 1"
  260. 3030 IF A$=" J" THEN A$="11"
  261. 3040 IF A$=" Q" THEN A$="12"
  262. 3050 IF A$=" K" THEN A$="13"
  263. 3060 NUM=VAL(A$)
  264. 3070 SUIT=ASC(RIGHT$(IN$,1))-2
  265. 3080 RETURN
  266. 3100 REM Redraw a row
  267. 3110 R=((ROW-1)*7)+1
  268. 3130 FOR PLACE=1 TO 13
  269. 3150 LOCATE 4+PLACE,R
  270. 3160 C$=ROW$(ROW,PLACE)
  271. 3170 GOSUB 1300
  272. 3180 NEXT PLACE
  273. 3190 RETURN
  274. 3200 REM Copy part of a row
  275. 3210 FP=1:TP=TOPLACE
  276. 3220 TP=TP+1
  277. 3230 ROW$(TOROW,TP)=ROW$(FROMROW,FP)
  278. 3240 ROW$(FROMROW,FP)="   "
  279. 3250 FP=FP+1
  280. 3260 IF ROW$(FROMROW,FP)<>"   " THEN 3220
  281. 3270 FOR I=1 TO 13
  282. 3280 ROW$(FROMROW,I)="   "
  283. 3290 NEXT I:RETURN
  284. 3400 REM Evaluate game performance
  285. 3405 LOCATE 22,1:PRINT "You placed";SCORE;"cards on the Aces piles"
  286. 3410 SC=INT(SCORE/10)+1
  287. 3415 IF SCORE=52 THEN SC=7
  288. 3420 IF SCORE=0 THEN GOSUB 3520:RETURN
  289. 3430 ON SC GOSUB 3450,3460, 3470, 3480, 3490, 3500, 3510
  290. 3440 RETURN  'score 0-9  10-19 20-29 30-39 40-49 50+
  291. 3450 PRINT "Too bad, better try again!":RETURN
  292. 3460 PRINT "Not too bad, still a lot of room for improvement":RETURN
  293. 3470 PRINT "Pretty good, keep trying.":RETURN
  294. 3480 PRINT "Good job.  Keep up the good work!":RETURN
  295. 3490 PRINT "Very good.  Now you have the idea!":RETURN
  296. 3500 PRINT "Almost got it.  Bad break!":RETURN
  297. 3510 PRINT "YOU DID IT!!  Congratulations!":RETURN
  298. 3520 PRINT "Oops!  You must have had a bad shuffle!":RETURN
  299. 4000 REM move from pile to row
  300. 4010 FROMROW=1:FROMPLACE=PILE
  301. 4020 LOCATE 24,1:PRINT "From pile to row? ";
  302. 4030 A$=INKEY$:GOSUB 10000
  303. 4040 IF (A$>="1" AND A$<="4") OR A$="U" THEN 4050 ELSE 4030
  304. 4050 IF A$="U" THEN PRINT "Up"; ELSE PRINT A$;
  305. 4060 IF A$="U" THEN 4250
  306. 4070 TOROW=VAL(A$)+1
  307. 4075 IF ROW$(TOROW,1)="   " THEN 4300
  308. 4080 FOR TOPLACE=13 TO 1 STEP -1
  309. 4090 IF ROW$(TOROW,TOPLACE)<>"   " THEN 4130
  310. 4100 NEXT TOPLACE
  311. 4110 GOSUB 990
  312. 4120 RETURN
  313. 4130 REM
  314. 4140 ABOVE$=ROW$(FROMROW,FROMPLACE)
  315. 4150 BELOW$=ROW$(TOROW,TOPLACE)
  316. 4160 GOSUB 2000               'check if match
  317. 4170 IF OK$="NO" THEN 4110
  318. 4180 ROW$(TOROW,TOPLACE+1)=ROW$(1,PILE)
  319. 4190 ROW=TOROW:GOSUB 3100    'redraw a row
  320. 4200 PILE=PILE+1:IF PILE>13 THEN LOCATE 5,1:PRINT "   ":RETURN
  321. 4210 LOCATE 5,1
  322. 4220 C$=ROW$(1,PILE)
  323. 4230 GOSUB 1300
  324. 4240 RETURN
  325. 4250 REM Play Deck Up
  326. 4260 ABOVE$=ROW$(1,PILE)
  327. 4270 GOSUB 2300        'play up
  328. 4280 IF OK$="NO" THEN 4110
  329. 4290 GOTO 4200
  330. 4300 REM place pile to empty row
  331. 4305 IF PILE>13 THEN RETURN
  332. 4310 ROW$(TOROW,1)=ROW$(1,PILE)
  333. 4320 GOTO 4190
  334. 5000 REM Instructions
  335. 5010 CLS:PRINT "Lucky 13 Solitaire":PRINT
  336. 5020 PRINT "This program plays Lucky 13 solitaire.  A deck of 52 cards is" 
  337. 5030 PRINT "used.  The first card is turned face up.  Next, 13 cards are"
  338. 5040 PRINT "counted into a pile and are placed so that only the top card"
  339. 5050 PRINT "is shown.  Then four cards are placed face up.  On each of the"
  340. 5060 PRINT "four card,s or rows, you may build in descending sequence:"
  341. 5070 PRINT "red on black, such as the tenof hearts on the jack of clubs"
  342. 5080 PRINT "or spades.":PRINT 
  343. 5090 PRINT "You can move the face up cards in a row as a unit.  The top"
  344. 5100 PRINT "card being moved must fit in sequence and color with the"
  345. 5110 PRINT "top card in the other row.":PRINT
  346. 5120 PRINT "You are always entitled to have 4 rows, and if one is"
  347. 5130 PRINT "entirely open the top card of the pile is moved into the space."
  348. 5140 PRINT "If the Pile has been exhausted, then any card of one value lower"
  349. 5150 PRINT "than the first card played up may be moved to the empty row."
  350. 5160 PRINT "For example, if the first card played up was the Four of Diamonds,"
  351. 5170 PRINT "then after the pile has been exhausted and a row emptied, any"
  352. 5180 PRINT "Three could be played to the empty spot to start a new row.":PRINT
  353. 5190 PRINT "     ** Press any key to continue **"
  354. 5200 IF INKEY$="" THEN 5200 ELSE CLS
  355. 5210 PRINT "The top card on the pile is availabe to be played, but not to be"
  356. 5220 PRINT "played on.  Instead of starting the top piles with Aces, these" 
  357. 5230 PRINT "piles are started with cards matching the first card turned up."
  358. 5240 PRINT "If that card was the Four of Diamonds, then the piles would all"
  359. 5250 PRINT "begin with Fours.":PRINT          
  360. 5280 PRINT "A card must be the top card of a row to be played up to"
  361. 5290 PRINT "the foundations.  Once played on the foundations, a"
  362. 5300 PRINT "card can NOT be removed to help elsewhere.":PRINT 
  363. 5310 PRINT "The remaining cards in the deck are used as the stock."
  364. 5320 PRINT "Every third card may be turned up and the deck may be gone"
  365. 5330 PRINT "through any number of times.  The top card is available for"
  366. 5340 PRINT "play to any row or the foundations.  When the top card"
  367. 5350 PRINT "is played, the next card will then be available.":PRINT 
  368. 5360 PRINT "You win if you can build all 4 foundations up to the end of the"
  369. 5370 PRINT "suit.  You lose when you can not make any further plays from the"
  370. 5380 PRINT "deck, or rows.":PRINT 
  371. 5390 PRINT "     ** Press any key to continue **"
  372. 5400 IF INKEY$="" THEN 5400 ELSE CLS
  373. 5410 PRINT "Plays are controlled by keyboard commands as follows:":PRINT 
  374. 5420 PRINT "D = Play top card of the Deck Up (U) or to row (#1-7)."
  375. 5430 PRINT "    Answer 'U' or row number 1-7 to next question to"
  376. 5440 PRINT "    indicate where the card is to be moved."
  377. 5450 PRINT "C = Get next Card in the deck and wait for next play command."
  378. 5460 PRINT "Q = Quit game and turn over all face-down cards."
  379. 5470 PRINT "#1-7 = Play cards from row# Up (U) or to another row (#1-7)"
  380. 5480 PRINT 
  381. 5490 PRINT "An error message will be displayed if an invalid response is"
  382. 5500 PRINT "given to any question or any invalid plays attempted."
  383. 5510 PRINT "     ** Press any key to continue **"
  384. 5520 IF INKEY$="" THEN 5520 ELSE CLS:RETURN
  385. 10000 REM Shift A$ to upper case
  386. 10020 L=LEN(A$)                          'get length of a$
  387. 10030 FOR I=1 TO L                       'look at each char 
  388. 10040 TEST=ASC(MID$(A$,I,1))             'get acsii value
  389. 10050 IF TEST<97 OR TEST>122 THEN 10080  'skip if not lower case
  390. 10060 TEST=TEST-32                       'bump down to upper case
  391. 10070 MID$(A$,I,1)=CHR$(TEST)            'insert upper case back 
  392. 10080 NEXT I                             'move on to next char
  393. 10090 RETURN
  394. 
  395.  
  396.